package main

import (
	"fmt"
	"os"
)

type student struct {
	id   int64
	name string
}

// 学生管理者
type studentMgr struct {
	allStudent map[int64]student
}

var smr = studentMgr

// 查看 增加 修改 删除

// 查看
func (c studentMgr) showStudents() {
	// 从c.allStudent这个map中把所有的学生逐个拎出来
	for _, stu := range c.allStudent { // stu是具体每一个学生
		fmt.Printf("学号：%d 姓名：%s\n", stu.id, stu.name)
	}
}

// 增加
func (c studentMgr) addStudents() {
	// 根据用户输入内容创建新的学生
	var (
		id   int64
		name string
	)
	// 获取用户输入
	fmt.Print("请输入学号：")
	fmt.Scanln(&id)
	fmt.Print("请输入姓名：")
	fmt.Scanln(&name)
	// 根据用户输入创建结构体对象
	newStu := student{
		id:   id,
		name: name,
	}
	// 把学生放到c.addStudents这个map中
	c.allStudent[newStu.id] = newStu
	fmt.Println(c.allStudent)
}

// 修改
func (c studentMgr) editStudents() {
	// 获取用户输入的学号
	var stuID int64
	fmt.Print("请输入学号：")
	fmt.Scanln(&stuID)
	// 展示该学号对应的学生信息，如果没有提示查无此人
	stuobj, ok := c.allStudent[stuID]
	if !ok {
		fmt.Print("查无此人")
	}
	fmt.Printf("你要修改的学生信息如下：学号：%d 姓名：%s\n", stuobj.id, stuobj.name)
	// 请输入修改手的学生名
	fmt.Print("请输入修改后的新名字：")
	var newName string
	fmt.Scanln(&newName)
	stuobj.name = newName
	// 更新学生的姓名
	c.allStudent[stuID] = stuobj
}

// 删除
func (c studentMgr) deleteStudents() {
	// 获取用户输入的学号
	var stuID int64
	fmt.Print("请输入学号：")
	fmt.Scanln(&stuID)
	// 展示该学号对应的学生信息，如果没有提示查无此人
	stuobj, ok := c.allStudent[stuID]
	if !ok {
		fmt.Print("查无此人")
	}
	delete(c.allStudent, stuobj.id)
	fmt.Print("删除成功！")
}

//

func showmenu() {
	fmt.Println("welcome sms!")
	fmt.Println(`
		1.查看所有学生
		2.添加学生
		3.修改学生
		4.删除学生
		5.退出
		`)

}

func main() {
	smr = studentMgr{ // 修改的全局变量
		allStudent: make(map[int64]student, 100),
	}
	for {
		showmenu()
		fmt.Println("请输入选项")
		var num int
		fmt.Scanln(&num)
		fmt.Println("你输入的是：", num)
		switch num {
		case 1:
			smr.showStudents()
			break
		case 2:
			smr.addStudents()
			break
		case 3:
			smr.editStudents()
			break
		case 4:
			smr.deleteStudents()
			break
		case 5:
			os.Exit(1)
		}
	}
}
